package main

import (
	"fmt"
	"os"
	"path/filepath"

	"backend/internal/api"
	"backend/internal/config"
	"backend/internal/service"
	"backend/pkg/blockchain"
	"github.com/gin-gonic/gin"
)

func main() {
	// 设置 Fabric SDK 需要的环境变量
	os.Setenv("DISCOVERY_AS_LOCALHOST", "true")
	os.Setenv("FABRIC_LOGGING_SPEC", "DEBUG")

	// 初始化配置（支持多配置文件加载）
	configPath := filepath.Join("..", "config", "config.yaml")
	if err := config.Init(configPath); err != nil {
		panic(fmt.Sprintf("配置初始化失败: %v", err))
	}

	// 打印当前工作目录 - 用于调试
	if wd, err := os.Getwd(); err == nil {
		fmt.Printf("当前工作目录: %s\n", wd)
	}

	// 初始化区块链客户端（多链支持）
	bcClient, err := blockchain.NewClient(config.GlobalConfig.Chains)
	if err != nil {
		panic(fmt.Sprintf("区块链客户端初始化失败: %v", err))
	}

	// 初始化服务层（多链架构核心）
	services := initServices(bcClient)

	// 创建路由并启动服务
	router := gin.Default()

	// 基础健康检查
	router.GET("/ping", func(c *gin.Context) {
		c.String(200, "pong")
	})

	// 注册所有API路由
	api.RegisterAllRoutes(router, services)

	router.Run(fmt.Sprintf(":%d", config.GlobalConfig.App.Port))
}

// 初始化服务层（支持多链服务实例）
func initServices(client *blockchain.Client) *service.Manager {
	return &service.Manager{
		EvidenceService: service.NewEvidenceService(client, config.GlobalConfig.Chains),
		AssertService:   service.NewAssertService(client, config.GlobalConfig.Chains),
	}
}
